package cn.rkylin.oms.salespromotion.rules.util.handler.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import cn.rkylin.oms.common.consts.YesNoConst;
import cn.rkylin.oms.order.domain.OrderSku;
import cn.rkylin.oms.order.vo.OrderSkuVO;
import cn.rkylin.oms.order.vo.OrderVO;
import cn.rkylin.oms.salespromotion.rules.domain.SalesPromotionConstrainGoods;
import cn.rkylin.oms.salespromotion.rules.util.handler.RuleMatchHandler;
import cn.rkylin.oms.salespromotion.rules.vo.SalesPromotionRuleVO;

/**
 * 类名: ConstrainGoodsHandler <br/>
 * 方法名: 校验是否按照限制商品做，以及是否包含限制商品 <br/>
 * 方法说明: 如果按照限制商品计算赠品，而订单中不包含限制商品，则不进行计算. <br/>
 * date: 2017年11月20日 下午4:00:05 <br/>
 *
 * @author zhanghao
 * @version 
 */
public class ConstrainGoodsHandler extends RuleMatchHandler {

    /**
     * 校验是否计算限制商品以及订单中是否存在限制商品.
     * @throws Exception 
     * @see cn.rkylin.oms.salespromotion.rules.util.handler.RuleMatchHandler#getValidMap(cn.rkylin.oms.order.vo.OrderVO, cn.rkylin.oms.salespromotion.rules.vo.SalesPromotionRuleVO)
     */
    @Override
    public Map<String, String> getValidMap(OrderVO orderVO, SalesPromotionRuleVO ruleVO) throws Exception {
        Map<String, String> result = new HashMap<String, String>();
        result.put(RESULT, SUCCESS);
        if(YesNoConst.YES.equalsIgnoreCase(ruleVO.getIsConstrainGoodsEnable())) {
            // 如果规则要求计算限制商品，则检查订单中是否包含限制商品，如果包含，则计算，如果不包含，则不计算
            List<OrderSku> orderGoodsList = orderVO.getSysOrderGoodsList();
            List<SalesPromotionConstrainGoods> constrainGoodsList = ruleVO.getConstrainGoodsList();
            ArrayList<String> constraingoodsSkuCodeArray = new ArrayList<String>();
            int skuCount = 0;
            for (SalesPromotionConstrainGoods salesPromotionConstrainGoods : constrainGoodsList) {
                constraingoodsSkuCodeArray.add(salesPromotionConstrainGoods.getRelGoodsSkuCode());
            }
            if(orderGoodsList==null||orderGoodsList.size()==0) {
                List<OrderSkuVO> skuVOList = orderService.getOrderSku(orderVO.getOrderId());
                List<OrderSku> skuListDemp = new ArrayList<OrderSku>();
                for (OrderSkuVO orderSkuVO : skuVOList) {
                    OrderSku temp = new OrderSku();
                    org.springframework.beans.BeanUtils.copyProperties(orderSkuVO, temp);
                    skuListDemp.add(temp);
                }
                orderVO.setSysOrderGoodsList(skuListDemp);
                orderGoodsList = orderVO.getSysOrderGoodsList();
            }
            for (OrderSku orderSku : orderGoodsList) {
                // 存在限制商品，则计算商品数量
                if(constraingoodsSkuCodeArray.contains(orderSku.getSkuCode())) {
                    skuCount+=1;
                }
            }
            
            if(skuCount==0) {
                result.put(RESULT, "订单中不存在限定商品，将不计算规则["+ruleVO.getRuleName()+"]");
            }
        }
        return result;
    }


}
